package com.proyecto.track.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.proyecto.track.bo.DynamicQueryTarea;
import com.proyecto.track.bo.Tarea;


// TODO: Auto-generated Javadoc
/**
 * The Class TareaDAOImp.
 */
@Transactional(rollbackFor=Exception.class)
public class TareaDAOImp extends HibernateDaoSupport implements TareaDAO{
	
	/**
	 * Inits the session factory.
	 * 
	 * @param factory
	 *            the factory
	 */
	@Autowired
	public void initSessionFactory(SessionFactory factory) {
	    setSessionFactory(factory);
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.TareaDAO#guardarTarea(com.proyecto.track.bo.Tarea)
	 */
	public Long guardarTarea(Tarea  tarea){
		super.getHibernateTemplate().save(tarea);
		return tarea.getIdTarea();
		
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.TareaDAO#actualizarTarea(com.proyecto.track.bo.Tarea)
	 */
	public void actualizarTarea(Tarea tarea){
		super.getHibernateTemplate().update(tarea);
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.TareaDAO#borrarTarea(java.lang.Long)
	 */
	public void borrarTarea(Long id){
		Tarea e = (Tarea) super.getHibernateTemplate().load(Tarea.class, id);
		super.getHibernateTemplate().delete(e);
		
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.TareaDAO#getTareaById(java.lang.Long)
	 */
	public Tarea getTareaById(Long id){
		return (Tarea) super.getHibernateTemplate().get(Tarea.class, id);
	}
	
	@SuppressWarnings("unchecked")
	public List<Tarea> getAllTareas(){
		return super.getHibernateTemplate().find("from Tarea as t");
	}

	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.TareaDAO#buscarTareas(com.proyecto.track.bo.Tarea)
	 */
	@SuppressWarnings("unchecked")
	public List<Tarea> buscarTareasDinamico(Tarea tarea) {

		Example example = Example.create(tarea).excludeZeroes() // exclude zero valued properties
				.ignoreCase() // perform case insensitive string comparisons
				.enableLike(); // use like for string comparisons

		DetachedCriteria criteria = DetachedCriteria
				.forClass(Tarea.class);
		criteria.add(example);
		return getHibernateTemplate().findByCriteria(criteria);
	}


	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.TareaDAO#getTareasForProyecto(java.lang.Long)
	 */
	@SuppressWarnings("unchecked")
	public List<Tarea> getTareasForProyecto(Long idProyecto) {
		return super.getHibernateTemplate().find("select p.Tareas from Proyecto as p where p.idProyecto = :idProyecto");

	}


}
